#include "ConfigMgr.h"
#include<boost/filesystem.hpp>
#include<boost/property_tree/ptree.hpp>
#include <boost/property_tree/ini_parser.hpp>
#include <iostream>
//两层循环，
ConfigMgr::ConfigMgr()
{
	// 获取当前工作目录  
	boost::filesystem::path current_path = boost::filesystem::current_path();
	// 构建config.ini文件的完整路径  
	boost::filesystem::path config_path = current_path / "config.ini";


	//解析ini文件
	boost::property_tree::ptree pt;
	boost::property_tree::read_ini(config_path.string(), pt);


	//这里访问的是每一个【】下面的东西
	for (const auto& section_pair : pt)
	{
		const std::string& section_name = section_pair.first;					//section名字
		const boost::property_tree::ptree& section_tree = section_pair.second;	//对应的内容，但是不是Section的结构，待会要解析

		// 对于每个section，遍历其所有的key-value对  
		std::map<std::string, std::string> section_config;	//解析section下的内容
		for (const auto& key_value_pair : section_tree) 
		{
			const std::string& key = key_value_pair.first;
			const std::string& value = key_value_pair.second.get_value<std::string>();
			section_config[key] = value;
		}

		//存放到里面
		SectionInfo sec;
		sec._section_datas = section_config;
		this->_config_map[section_name] = sec;
	}
	// 输出所有的section和key-value对  
	for (const auto& section_entry : _config_map)
	{
		const std::string& section_name = section_entry.first;
		SectionInfo section_config = section_entry.second;
		std::cout << "[" << section_name << "]" << std::endl;
		for (const auto& key_value_pair : section_config._section_datas) {
			std::cout << key_value_pair.first << "=" << key_value_pair.second << std::endl;
		}
	}
}

ConfigMgr::ConfigMgr(const ConfigMgr& con)
{
	this->_config_map = con._config_map;
}

SectionInfo ConfigMgr::operator[](std::string str)
{
	if (this->_config_map.find(str) == _config_map.end())
	{
		return {};
	}
	return _config_map[str];
}

ConfigMgr& ConfigMgr::operator=(const ConfigMgr& con)
{
	if (&con == this)
	{
		return *this;
	}
	this->_config_map = con._config_map;
	return *this;

}


ConfigMgr::~ConfigMgr()
{
	this->_config_map.clear();
}
